﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Economo.Services.MessageContracts;
using Economo.Services.FaultContracts;


namespace Economo.Services.ServiceImplementation
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IAccountsService
    {
        #region Banks
        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetBanksByDescriptionResponse GetBanksByDescription(GetBanksByDescriptionRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void UpdateBank(UpdateBankRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteBankById(DeleteBankByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteBank(DeleteBankRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        InsertBankResponse InsertBank(InsertBankRequest request);
        #endregion
        #region BankAccounts
        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetBanksAccountsResponse GetAllBanksAccounts();

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetBanksAccountsResponse GetBankAccounts(GetBankAccountsRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void UpdateBankAccount(UpdateBankAccountRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteBankAccountById(DeleteBankAccountByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteBankAccount(DeleteBankAccountRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        InsertBankAccountResponse InsertBankAccount(InsertBankAccountRequest request);
        #endregion
        #region CreditCards
        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetCreditCardsResponse GetAllCreditCards();

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetCreditCardsResponse GetBankCreditCards(GetCreditCardsRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void UpdateCreditCard(UpdateCreditCardRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteCreditCardById(DeleteCreditCardByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteCreditCard(DeleteCreditCardRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        InsertCreditCardResponse InsertCreditCard(InsertCreditCardRequest request);
        #endregion

        #region AccountTypes
        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetAccountTypeByIdResponse GetAccountTypeById(GetAccountTypeByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void UpdateAccountType(UpdateAccountTypeRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteAccountTypeById(DeleteAccountTypeByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        InsertAccountTypeResponse InsertAccountType(InsertAccountTypeRequest request);
        #endregion
        #region Accounts
        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        GetAccountByIdResponse GetAccountById(GetAccountByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void UpdateAccount(UpdateAccountRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        void DeleteAccountById(DeleteAccountByIdRequest request);

        [FaultContract(typeof(ServiceFault))]
        [OperationContract]
        InsertAccountResponse InsertAccount(InsertAccountRequest request);
        #endregion
    }

    
}
